home *** CD-ROM | disk | FTP | other *** search
/ STraTOS 1997 April & May / STraTOS 1 - 1997 April & May.iso / CD01 / INTERNET / SITES / LITTLE / TOOLKIT.ZIP / TOOLS / TKBUBBLE / TKBUBBLE.S < prev    next >
Encoding:
Text File  |  1997-01-24  |  3.6 KB  |  123 lines

  1.  
  2. *-------------------------------------------------------*
  3.  
  4.     COMMENT        HEAD=7
  5.  
  6. *-------------------------------------------------------*
  7.  
  8. trap1            =    $84
  9. trap2            =    $88
  10. trap13            =    $B4
  11. trap14            =    $B8
  12.  
  13. *-------------------------------------------------------*
  14.  
  15. *-------------------------------------------------------*
  16.         rsset    -12
  17. *-------------------------------------------------------*
  18. xbra_tag    rs.l    1
  19. xbra_id        rs.l    1
  20. xbra_ptr    rs.l    1
  21.  
  22. *-------------------------------------------------------*
  23.  
  24. push    macro
  25.     move.\0        \1,-(sp)
  26.     endm
  27.     
  28. pop    macro
  29.     move.\0        (sp)+,\1
  30.     endm
  31.  
  32. *-------------------------------------------------------*
  33.  
  34. *-------------------------------------------------------*
  35. bubble:
  36. *-------------------------------------------------------*
  37. *    Local stack                    *
  38. *-------------------------------------------------------*
  39.     lea        usp_stack,sp
  40. *-------------------------------------------------------*
  41. *    Enter supervisor mode                *
  42. *-------------------------------------------------------*
  43.     pea        ssp_stack
  44.     push.w        #32
  45.     trap        #1
  46.     addq.l        #6,sp
  47.     move.l        d0,os_stack
  48. *-------------------------------------------------------*
  49. *    Bubble trap vectors                *
  50. *-------------------------------------------------------*
  51.     lea        trap1.w,a2
  52.     bsr        bubble_xbra
  53. *-------------------------------------------------------*
  54. exit_program:
  55. *-------------------------------------------------------*
  56. *    User mode                    *
  57. *-------------------------------------------------------*
  58.     push.l        os_stack
  59.     push.w        #32
  60.     trap        #1
  61.     addq.l        #6,sp
  62. *-------------------------------------------------------*
  63. *    Terminate                    *
  64. *-------------------------------------------------------*
  65.     clr.w        -(sp)
  66.     trap        #1
  67.     
  68. *---------------------------------------------------------------*
  69. bubble_xbra:
  70. *---------------------------------------------------------------*
  71.     move.l        a2,a1
  72. *---------------------------------------------------------------*
  73. *    Search for XBRA patch                    *
  74. *---------------------------------------------------------------*
  75. .look:    move.l        (a1),d0
  76.     beq.s        .done
  77.     move.l        d0,a0
  78. *---------------------------------------------------------------*
  79. *    Check for premature end of XBRA chain            *
  80. *---------------------------------------------------------------*
  81.     cmp.l        #'XBRA',xbra_tag(a0)
  82.     bne.s        .done
  83.     cmp.l        #'_DOS',xbra_id(a0)
  84.     beq.s        .done
  85. *---------------------------------------------------------------*
  86. *    Check for ToolKit                    *
  87. *---------------------------------------------------------------*
  88.     cmp.l        #'TK40',xbra_id(a0)
  89.     beq.s        .got
  90. *---------------------------------------------------------------*
  91. *    Next link in chain                    *
  92. *---------------------------------------------------------------*
  93.     lea        xbra_ptr(a0),a1
  94.     bra.s        .look
  95. *---------------------------------------------------------------*
  96. *    a0 = XBRA patch address                    *
  97. *    a1 = XBRA patch address pointer (previous XBRA)        *
  98. *---------------------------------------------------------------*
  99. *    Remove XBRA patch                    *
  100. *---------------------------------------------------------------*
  101. .got:    move.l        xbra_ptr(a0),(a1)        
  102. *---------------------------------------------------------------*
  103. *    Re-install XBRA patch                    *
  104. *---------------------------------------------------------------*
  105.     move.l        (a2),xbra_ptr(a0)
  106.     move.l        a0,(a2)
  107. *---------------------------------------------------------------*
  108. .done:    rts
  109.  
  110. *---------------------------------------------------------------*
  111.             bss
  112. *---------------------------------------------------------------*
  113.  
  114. os_stack:        ds.l    1
  115.  
  116.             ds.b    1024
  117. usp_stack:        ds.l    1
  118.  
  119.             ds.b    1024
  120. ssp_stack:        ds.l    1
  121.  
  122. *---------------------------------------------------------------*
  123.